import router from "./router";
import store from "./store";
import { Message } from "element-ui";
import NProgress from "nprogress"; // progress bar
import "nprogress/nprogress.css"; // progress bar style
import { getToken } from "@/utils/auth"; // get token from cookie
import getPageTitle from "@/utils/get-page-title";

NProgress.configure({ showSpinner: false });
const whiteList = ["/login"];

router.beforeEach(async (to, from, next) => {
  NProgress.start();
  document.title = getPageTitle(to.meta.title);
  // const hasToken = getToken()
  // if (hasToken) {

  //   if (to.path === '/login') {
  //     next({ path: '/' })
  //     NProgress.done()
  //   } else {
  //     const hasGetUserInfo = store.getters.name
  //     if (hasGetUserInfo) {
  //       next()
  //     } else {
  //       try {
  //         await store.dispatch('user/getInfo')
  //         next()
  //       } catch (error) {
  //         await store.dispatch('user/resetToken')
  //         Message({ type: 'error', message:  error || 'Has Error'})
  //         next(`/login?redirect=${to.path}`)
  //         NProgress.done()
  //       }
  //     }
  //   }
  // } else {
  //   if (whiteList.indexOf(to.path) !== -1) {
  //     next()
  //   } else {
  //     next(`/login?redirect=${to.path}`)
  //     NProgress.done()
  //   }
  // }

  const hasToken = getToken();
  if (hasToken) {
    //如果有token
    // 如果有token,就不要去登录页面
    if (to.path === "/login") {
      next("/"); //去首页
    }
    // 判断是否有用户信息
    const userHasName = store.getters.name;
    if (userHasName) {
      //如果有用户信息,放行
      next();
    } else {
      // 否则获取用户的信息
      try {
        await store.dispatch("user/getInfo"); //获取正常成功放行
        next(to);//重新跳转去目标路径,能看到动态添加的异步路由
        // next();

      } catch (error) {
        // 获取错误,重新清空用户的信息,他会回到上面的判断
        await store.dispatch("user/resetToken");
        // message报错,返回登录页面重新登录
        Message.error(error)
        next(`/login?redirect=${to.path}`);
      }
    }
  } else {
    // 没有token要直接去登录页面,我就直接放行
    if ((to.path.includes("/login"))) {
      next();
    } else {
      // 否则返回上一级页面,为了login页面通过后面携带路径去跳转上一级页面
      next(`/login?redirect=${to.path}`);
      NProgress.done();
    }
  }



});

router.afterEach(() => {
  NProgress.done();
});
